public class java3 {//类

    public static void main(String[] args) {
        //条件运算符：布尔表达式1 ？ 表达式2 ： 表达式3
        //当表达式1为真时，返回表达式2，否则返回表达式3的结果
        boolean flg = (true == true) ? (true == true) ? false : true : true;
        System.out.println(flg);
                             //表达式1                 表达式2               表达式3
    }

    public static void main15(String[] args) {
        //左移 在右边补0
        //0000 1011  11
        //0000 1011 < < 1(左移一位)-----0001 0110 22  11*2^1
        //0000 1011 < < 2(左移两位)-----0010 1100 44  11*2^2
        //右移是补符号位
        //0000 1011 > > 1(右移一位)-----0000 0101 5   11/2^2
        //0000 1011 > > 2(右移两位)-----0000 0010 2   11/*2^2
        //1111 1111 > > 1       结果       1111 1111 -1
        int a = -1;
        System.out.println(a >>> 1);
        //>>> 无符号右移  统统在左边补0
        //1111 1111 >>> 1 ---> 0111 1111
        //没有无符号左移这个概念
    }

    public static void main14(String[] args) {
        //123(十进制) = 1*10^2+2*10^1+3*10^0
        //1011(二进制) = 1*2^3+0*2^2+1*2^1+1*2^0=11
        //& 按位与 ：（对应位只要有0 就是0）
        //0000 1011  11
        //0000 1101  13  &
        //-----------结果
        //0000 1001
        //-----------------------------
        //| 按位或(只要对应位上是1 结果就是1)
        //1011          0010
        //1101          1000
        //-------结果
        //1111          1010
        //-------------------------------
        //^按位异或 计算逻辑：对应位不一样 就是1，一样就是0
        //0010 1011
        //0001 1010  ^
        //---------------结果
        //0011 0001
        //1.两个相同数字 异或 结果是0
        //0010
        //0010  ^
        //-------
        //0000
        //2.0 ^(异或) n = n
        //0000
        //0011 ^
        //---------
        //0011
        //按位取反 是1变为0，是0变为1
    }

    public static void main13(String[] args) {
        int a = 1;
        int b = 2;
        //此时&符号，如果左右俩边都是布尔类型，那么也相当于逻辑运算
        System.out.println(a == 1 & b ==2);
        //此时和刚刚的区别在于 这里不能进行短路求值了
        System.out.println(a == 2 & (1/0)==0);
    }

    public static void main12(String[] args) {
        //逻辑非 ： ！布尔表达式 ！true或！false
        //!true->false   !false->true
        //!a是错的
        int a = 10;
        System.out.println(!(a == 10));//先判断a是否等于10
    }

    public static void main11(String[] args) {
        //逻辑或 ||（短路或） ：布尔表达式1 || 布尔表达式2
        //如果表达式1为真，就不执行表达式2，整体已经为真，就已经发生短路了
        //如果表达式1为假，就继续执行表达式2，表达式2为真，整体已经为真
        //这个表达式要为真，至少有一个表达式为真
        int a = 1;
        int b = 2;
        System.out.println(a == 10 || (1/0)==0);
    }

    //java.lang.ArithmeticException算数异常；例如空指针异常（NullPointerException）
    //by zero除0的意思（解释异常）
    //java3.java:17(告诉你代码在哪一行有问题)

    public static void main10(String[] args) {
        //布尔表达式1 && 布尔表达式2
        //两个取值 true/false
        //逻辑与（短路与）：如果表达式1为真，就去执行表达式2，表达式2也为真，那么整体为真
        //如果表达式1为假，就不会执行表达式2
        int a = 1;
        int b = 2;
//        System.out.println(a == 1 && b ==2);
//        System.out.println(a == 2 && b ==2);

        System.out.println(a == 2 && (1/0)==0);//(1/0)==0没有执行，所以没有报错
    }

    public static void main9(String[] args) {
        System.out.println(1 < 5);
        System.out.println(1 <= 5);
        System.out.println(1 > 5);
        System.out.println(1 >= 5);
        System.out.println(1 != 5);
        System.out.println(1 == 5);
        int a = 10;
       //System.out.println(3 < a < 100);//不能编译通过
                           //true < 100;
    }

    public static void main8(String[] args) {
        int a = 10;
        int b = ++a;//a = a+1;b = a;
        //int b = a++;//b = a;a = a+1;
        System.out.println(a);
        System.out.println(b);
        //记住结论就好
        int i = 10;
        i = i++;
        System.out.println(i);
    }

    public static void main7(String[] args) {
        int a = 10;
        a += 1;//a = a + 1
        System.out.println(a);

        short sh = 12;
        //sh = sh + 2;右边为4个字节 short类型2个字节
        sh += 2;//帮助我们进行类型转换（强制类型转换）
        System.out.println(sh);
    }

    public static void main6(String[] args) {
        System.out.println(10%3);
        System.out.println(10%-3);
        System.out.println(-10%3);
        System.out.println(-10%-3);

        System.out.println(11.5%2);//允许有小数点
    }

    public static void main5(String[] args) {
        System.out.println(5/2);
        System.out.println((float)5/2);
        System.out.println(5/(float)2);
        System.out.println((float)(5/2));//先算5/2再转float
    }

    public static void main4(String[] args) {
        //字符串转变整形
        String sre = "12345";
        int ret = Integer.valueOf(sre);
        int ret2 =Integer.parseInt(sre);
        double ret3 = Double.parseDouble(sre);
        System.out.println(ret+1);
        String sre1 = "1.25";
        double ret1 = Double.valueOf(sre1);
        System.out.println(ret1+0.1);
    }

    public static void main3(String[] args) {
        //整型转变字符串
        int a = 12345;
        String aa = a+"";
        System.out.println("--->"+aa);
        //通过点号来调用类方法
        String ret = String.valueOf(a);
        System.out.println(ret);
        //任何数据类型和字符串拼接其结果一定是字符串

        float f = 12.5f;
        String ret2 = String.valueOf(f);
        System.out.println(ret2);
    }

    public static void main2(String[] args) {
        //String不是包装类
        //包装类->基本数据类型对应的类类型
        String str1 = "hello";
        String str2 = "world";
        //在字符串当中，如果两个字符串相加，就是拼接的意思
        System.out.println(str1+str2);
        int a = 10;
        int b = 12;
        //字符串+其他数据类型->字符串
        System.out.println("a = "+a);
        System.out.println("b = "+b);
        //“a+b =”+a+b输出1012 从左向右运算
        System.out.println("a+b = "+(a+b));//输出22
        //先计算a+b
        System.out.println(a+b +"是a+b的和");
    }
    public static void main1(String[] args) {
        //C语言中没有字符串的数据类型
        //char *p = "hello" 此时p只是一个指针变量，类型为char *类型
        String str = "hello";
        System.out.println(str);
        int a = 12;
        System.out.println(a);
        //str和a都叫做局部变量，此时他们依旧存放在栈上
    }
}
